import path from 'path'
import os from 'os'
import fs from 'fs'
import {dialog} from "electron";

import regedit from 'regedit'
regedit.setExternalVBSLocation('./resources/vbs')

const osType = os.type();
const osArch = os.arch();

/*
HKLM=HKEY_LOCAL_MACHINE，是机器软硬件信息的集散地。
HKCU=HKEY_CURRENT_USER，是当前用户所用信息储存地。
HKEY_CLASSES_ROOT：文件关联相关信息。
HKEY_USERS：所有用户信息。
HKEY_CURRENT_CONFIG：当前系统配置
 */

/**
 * 获取注册表值
 * @param basePath 根级注册表
 * @param targetKey 目标注册表属性名
 * @returns {Promise<unknown>} 返回获取到的注册表值
 */
function getValueByBasePathAndKey(basePath,targetKey){
    //console.log("当前Path:" + basePath)
    return new Promise((resolve, reject) => {
        regedit.list(basePath,function(err, result) {
            if(!result){
                reject();
                return
            }
            let regList = []
            for(let key in result){
                let val = result[key];
                let reg = {
                    path:key,//字符串
                    subKeys:val && val.keys ? val.keys:[],//数组类型
                    items:val && val.values ? val.values : null //对象类型
                }
                regList.push(reg);
            }
            // 未获取到注册表
            if(regList.length < 1){
                reject();
                return
            }
            let reg = regList[0];
            //当前注册表找到了
            if(reg.items && reg.items.hasOwnProperty(targetKey)){
                resolve(reg.items[targetKey]['value'])
                return
            }
            // 当前注册表没找到，且没有下级注册表
            if(!reg.subKeys || reg.subKeys.length < 1){
                reject();
                return
            }
            let promiseArr = []
            for(let i = 0;i < reg.subKeys.length; i++){
                let nextPath = reg.path + '\\' + reg.subKeys[i]
                let promise = getValueByBasePathAndKey(nextPath,targetKey);
                promiseArr.push(promise);
            }
            Promise.any(promiseArr).then(value => {
                resolve(value)
            },err=>{
                reject();
            })
        })
    })

}

export default {
    getRegValue(regKey) {
        return new Promise((resolve, reject) => {
            if(osType === "Windows_NT"){
                let basePath = 'HKCU\\SOFTWARE\\kingsoft\\Office';
                let targetKey = 'UserName';
                getValueByBasePathAndKey(basePath,targetKey).then(val=>{
                    resolve(val);
                },err=>{
                    reject("未获取到注册表信息");
                });

            } else {
                reject("当前操作系统不是windows，不能操作注册表信息");
            }

        })
    },
}


